/*************************************************
 * HISTORY:                                      *
 *	06/22/2020 pyx : Created.                *
 *	03/04/2021 pyx : Edited.                 *
=================================================*/

#ifndef DA_TYPE_H
#define DA_TYPE_H

static const char *refTypeNames[] = {
    "Declaration",
    "Defined-Test",
    "Definition",
    "Expansion",
    "Included",
    "Qualifier",
    "Reference",
    "Undefinition",
    ""};

static const char *symbolTypeNames[] = {
    "Enum",
    "Enumerator",
    "Field",
    "Function",
    "GlobalVariable",
    "LocalVariable",
    "Macro",
    "Method",
    "Parameter",
    "Path",
    "Struct",
    "Typedef",
    "Union",
    ""};

enum RefType : int
{
    RT_Declaration,
    RT_DefinedTest, //macro
    RT_Definition,  //macro
    RT_Expansion,   //macro
    RT_Included,    //macro
    RT_Qualifier,
    RT_Reference,
    RT_Undefinition, //macro
    RT_Max
};

enum SymbolType : int
{
    ST_Enum,
    ST_Enumerator,
    ST_Field, //struct/union/class member
    ST_Function,
    ST_GlobalVariable,
    ST_LocalVariable,
    ST_Macro,
    ST_Method,//NOT USE
    ST_Parameter,
    ST_Path,
    ST_Struct,
    ST_Typedef,
    ST_Union,
    ST_Max
};

enum SDependencyType : int {
    //SDT_A_B means B has a dependency on A (B-->A)
    SDT_Func_Function,//exclude static function call static function
    SDT_RetType_Function,
    SDT_ParamType_Function,
    SDT_Type_Parameter,
    SDT_Type_Variable,
    SDT_Type_Struct,
    SDT_Type_Typedef,
    SDT_Type_Union,
    SDT_Symbol_Marco,//can be split //TODO
    SDT_GlobalVar_GlobalVar,//not static var,TODO:gv1 = (gv2 = gv3+b)?is it necessary to add gv1--->gv2&gv3?
    SDT_GlobalVar_Function,//function needs gv, because func call uses a gv as input param(TODO) or func uses a gv in its body
    SDT_Max
};

#endif //DA_TYPE_H
